import java.util.Arrays;

//在排序数组中查找元素的第一个位置和最后一个位置；
//实例1:
//输入：nums = [5,7,7,8,8,10], target = 8
//输出：[3,4]
//实例2：
//输入：nums = [5,7,7,8,8,10], target = 6
//输出：[-1,-1]
//实例3：
//输入：nums = [], target = 0
//输出：[-1,-1]
//解题思路：
//根据二分查找法进行解决此题（此题可以进行分段）
//1.对左区间进行二分查找；
//2.解决细节问题：①：明确正确的循环条件
//              ②：中间端点的正确设置；
//3.对右区间进行二分查找；
//解决细节问题：①：明确正确的循环条件
////              ②：中间端点的正确设置；
//4.进行结果的正确返回；
public class Nm1 {
    public static int[] fun(int[] nums, int target) {
        //1，进行相关变量的设置；
        int[] ret = new int[2];
        ret[0]=ret[1]=-1;
        if(nums.length==0){
            return ret;
        }
        //2进行对左区间进行二分查找；
        int left=0;
        int right= nums.length-1;
        while(left<right){
            int mid=left+(right-left)/2;//中间端点的设置；
            if(nums[mid]<target){
                left=mid+1;
            }else{
                right=mid;
            }
        }
        //3.进行对结果的确定；(判断是否有结果);
        if(nums[left]!=target){
            return ret;
        }else{
            ret[0]=left;//此处为right也可以；
        }

        //4，进行对右区间进行二分查找；
        left=0;right= nums.length-1;
        while(left<right){
            int mid=left+(right-left+1)/2;
            if(nums[mid]<=target){
                left=mid;
            }else{
                right=mid-1;
            }
        }
        //4.进行结果的确定；
        if(nums[right]!=target){
            return ret;
        }else{
            ret[1]=right;
        }
        return ret;
    }
    public static void main (String[] args){
        int[] nums={5,7,7,8,8,10};
        int target=8;
        int[] ret=fun(nums,target);
        System.out.println(Arrays.toString(ret));
    }
}
//注意：1，进行完左区间二分后要进行left和right的重新取值；
//     2.在进行判断中间端点的值和target值是否相等的时候要注意何时有等于的情况；